DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Desenvolvimento Multicamadas em Csharp (C#(csharp)) - Parte 4 - Exemplo prático [Camada de Apresentação]

Neste quarto artigo será apresentado a camada de apresentação, onde criaremos um formulário para cadastro de dados dos clientes e um formulário de pesquisa genérico que poderá ser reutilizado em toda a aplicação.


Desenvolvendo uma aplicação Multicamadas para Windows em C#

 

Parte 4 )Camada Intermediária: Lógica de Negócios

 

Introdução

 

Este artigo é o quarto de uma série de artigos que apresentam um exemplo prático e simples abordando o desenvolvimento em camadas em C#, sabemos que a programação orientada a objetos (POO) possibilita uma abordagem simples para a utilização de dados usando objetos. Aproveitando o comentário do amigo Queiroz “Como o seu objetivo é abstrair algumas operações com o banco de dados um nome que mais relacionado à persistência ficaria melhor” sobre os artigos anteriores, diga-se por sinal que comentário foi bem oportuno; é importante destacar que as camadas nos dizem como agrupar os componentes já o modelo MVC apresenta a forma de interação entre essas. O nome dado a segunda camada (Intermediária) acredito que esteja bem adequado, no entanto a lógica do controlador, deve ser vista como a parte da camada que contém as classes com o  conhecimento necessário sobre como persistir objetos no banco de dados, como usei o referencial teórico apresentado no artigo 1 (Deitel et al, 2002) esta persistência encontra-se apresentada como “lógica do controlador”, tradução técnica feita também na versão brasileira do Livro “Como programar C#”. É importante que o leitor não confunda estes conceitos. Aqui no próprio devmedia, os amigos podem encontrar artigos interessantes demonstrando na prática os conceitos de MVC que em projetos maiores é uma boa prática a realização do mapeamento entre os objetos de domínio com o banco de dados. O leitor pode conhecer mais sobre esse mapeamento utilizando por exemplo o Nhibernate, aqui no portal com as vídeo aulas do Rodrigo. Link abaixo:

 

http://www.devmedia.com.br/articles/viewcomp.asp?comp=7341&hl=

 

Revisando

 

No primeiro artigo foi apresentado um cenário para o desenvolvimento da aplicação e criado o Banco de Dados com as respectivas tabelas e o mapeamento Entidade Relacionamento entre elas.

 

No segundo artigo dessa série foi apresentada a classes da camada “2 – Camada Intermediaria” que representa a lógica do controlador, classe essa que faz a interface entre a lógica de negócio e os dados no banco de dados.

 

No terceiro artigo foi apresentada a classe clnClientes.cs que compõe as regras de negócios do Sistema de Controle de Apólices de Seguro proposto no primeiro artigo. É importante também destacar que o leitor pode acrescentar, como já foi dito, comportamentos a esta classe, coisa que aqui por questão de didática deixei de incluir.

 

Este Artigo

 

Neste quarto artigo será apresentado a camada de apresentação, onde criaremos um formulário para cadastro de dados dos clientes e um formulário de pesquisa genérico que poderá ser reutilizado em toda a aplicação.

 

Lembrando que ao ao final dessa série de artigos, disponibilizarei o código dessa aplicação exemplo. Espero que vocês tenham enfrentado o desafio do artigo anterior.

 

 

 

 

Figura  SEQ Figura \* ARABIC 1 - Camadas da Aplicação

 

 

3 – Camada de Apresentação

 

A camada de apresetação ou camada do cliente ou ainda camada superior é a interface com o usuário, que neste caso são as janelas Winforms do nosso aplicativo exemplo. A camada do cliente interage com a camada intermediária para fazer pedidos e recuperar dados da camada de dados. Então, a camada de apresentação exibe para o usuário os dados recuperados pela camada intermediária. Esta divisão em camadas certamente deixa o código com uma leitura e controle mais fácil. Pois as regras estão em uma camada isolada. Supondo que nossa aplicação fosse cliente de uma aplicação Web Service em um servidor numa intranet, as regras poderiam estar nas classes desse único servidor facilitando assim a manutenção, pois caso o código venha a ser alterado, não é necessário compilar as alterações nas máquinas clientes. Um bom trabalho poupado.

 

Cenário:

 

Criaremos nesse momento o primeiro formulário, que servirá de interface com os dados do cliente. Onde o usuário poderá, incluir, alterar, excluir e pesquisar por um determinado cliente. Nota, lembre-se que a idéia é criar um formulário para pesquisa genérico que venha a servir em outros tipos de pesquisa, como por exemplo: apólices de seguro ou parcelas do cliente.

 

Mão na Massa:

 

1) Com o aplicativo aberto Seguros_OO, você deve ter um formulário Form1 na janela do solution explorer, arraste-o para dentro da Camada de Apresentação, pasta [Camada Apresentacao].

 

 

 

Figura  SEQ Figura \* ARABIC 2 – Form1.cs

 

 

Caso você não tenha esse formulário, clique com o botão direito do mouse sobre a camada de apresentação e adicione um novo formulário.

 

Renomeie esse formulário para FrmClientes.cs

 

 


Figura  SEQ Figura \* ARABIC 3 - Formulário renoemado.

 

 

2) Crie uma interface arrastando os objetos para a tela conforme abaixo e definindo o nome dos controles como apresentado em azul:

 

 


Figura  SEQ Figura \* ARABIC 4 - Cadastro de Clientes

 

3) Altere as propriedades de todos os botões exceto (btnProcurar e btnSair), como abaixo:

 

Controle

Propriedade

Valor

btnIncluir

Enabled

false

btnAtualizar

Enabled

false

btnExcluir

Enabled

false

btnCancelar

Enabled

false

 

O formulário deve funcionar desta forma:

  • Quando for carregado o foco deve estar no primeiro campo o controle txtidCli
  • Quando o usuário sair desse controle, faremos uma busca no Banco de Dados para retornar o código digitado, caso não tenha o código será habilitado a opção de incluir e caso contrário será habilitado o botão atualizar.

 

4) Selecione o controle txtidCli e na janela de eventos, veja Figura 5 - Janela para seleciona evento, e escolha o evento leave (para conhecedores do VB – lostfocus), dê um duplo clique nele e adicione o código abaixo:

 


Figura  SEQ Figura \* ARABIC 5 - Janela para selecionar evento

 

5) Código do evento Leave:

        private void txtIdCli_Leave(object sender, EventArgs e)

        {

           int vidCli=0;

           if (txtIdCli.Text.Trim() != "")

           {

                vidCli = int.Parse(txtIdCli.Text);

           }

            clnClientes cliente = new clnClientes();

            cliente.IdCli = vidCli;

            cliente.Buscar();

            if (cliente.NomeCli == null)

            {

                //preparando para inclusao

                LimparTxt(groupBox1);

                txtIdCli.Text = "";

                txtIdCli.Enabled = false;

                btnIncluir.Enabled = true;

                btnCancelar.Enabled = true;

            }

            else

            {

                //preparando para alteracao

                LimparTxt(groupBox1);

                txtIdCli.Enabled = false;

                txtIdCli.Text = Convert.ToString(cliente.IdCli);

                txtnomeCli.Text = Convert.ToString(cliente.NomeCli);

                txtenderecoCli.Text = Convert.ToString(cliente.EnderecoCli);

                txtfoneCli.Text = Convert.ToString(cliente.FoneCli);

                txtfaxCli.Text = Convert.ToString(cliente.FaxCli);

                txtobsCli.Text = Convert.ToString(cliente.ObsCli);

                btnAtualizar.Enabled = true;

                btnCancelar.Enabled = true;

                btnExcluir.Enabled = true;

 

            }

        }

 

É necessário que você indique o local de armazenamento das classes nas declarações de using. Neste caso indique:

 

...

using System.Text;

using System.Windows.Forms;

using Seguros_OO.Camada_Intermediaria.Logica_Negocios;

 

No código anterior observe as linhas destacadas em negrito e itálico nos blocos if e else. Invoca-se um método chamado LimparTxt passando como parâmetro o objeto do tipo GroupBox chamado groupBox1. A idéia é que quando o código for invocado ele “limpe” todas as caixas de textos que estão dentro do groupBox.

 

6) Acrescente o código a seguir, logo acima ou abaixo do método anterior.

        //Método público para limpar caixas de texto

        public void LimparTxt(Control controles)

        {

            foreach (Control ctl in controles.Controls)

            {

                if (ctl is TextBox) ctl.Text = "";

            }

        }

 

7) Na lista abaixo código encontra-se o código do botão incluir. Observe como este código é limpo. Lembre-se que as regras para gravação do cliente poderiam ter sido criadas na classe clnCliente no método Gravar ou nos métodos de escrita Set daquela classe.

 

        private void btnIncluir_Click(object sender, EventArgs e)

        {

            try

            {

                clnClientes cliente = new clnClientes();

                //Dispara o método para buscar o IdCli

                cliente.IdCli = cliente.BuscarId();

                cliente.NomeCli = txtnomeCli.Text;

                cliente.EnderecoCli = txtenderecoCli.Text;

                cliente.FoneCli = txtfoneCli.Text;

                cliente.FaxCli = txtfaxCli.Text;

                cliente.ObsCli = txtobsCli.Text;

                cliente.Gravar();

                string mensagem = "Registro Cliente: " +

                    cliente.IdCli + "\nNome: " + cliente.NomeCli +

                    "\nGravado com sucesso";

                MessageBox.Show(mensagem, "Sucesso",

                    MessageBoxButtons.OK,

                    MessageBoxIcon.Information);

                LimparTxt(groupBox1);

                btnIncluir.Enabled = false;

                btnCancelar.Enabled = false;

                txtIdCli.Enabled = true;

                txtIdCli.Focus();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Aconteu o erro: " + ex.Message, "Erro");

            }

        }

 

 

8) Abaixo o código do botão atualizar.

 

        private void btnAtualizar_Click(object sender, EventArgs e)

        {

            try

            {

                clnClientes cliente = new clnClientes();

                cliente.IdCli = int.Parse(txtIdCli.Text);

                cliente.NomeCli = txtnomeCli.Text;

                cliente.EnderecoCli = txtenderecoCli.Text;

                cliente.FoneCli = txtfoneCli.Text;

                cliente.FaxCli = txtfaxCli.Text;

                cliente.ObsCli = txtobsCli.Text;

                cliente.Atualizar();

                string mensagem = "Registro Cliente: " +

                    cliente.IdCli + "\nNome: " + cliente.NomeCli +

                    "\nAlterado com sucesso";

                MessageBox.Show(mensagem, "Sucesso",

                    MessageBoxButtons.OK,

                    MessageBoxIcon.Information);

                LimparTxt(groupBox1);

                btnAtualizar.Enabled = false;

                btnCancelar.Enabled = false;

                btnExcluir.Enabled = false;

                txtIdCli.Enabled = true;

                txtIdCli.Focus();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Aconteu o erro: " + ex.Message, "Erro");

            }

 

9) Abaixo o código do botão Excluir.

        private void btnExcluir_Click(object sender, EventArgs e)

        {

            string pergunta;

            pergunta = "Deseja excluir o cliente: \n" +

                txtIdCli.Text + ": " + txtnomeCli.Text +

                "  ?";

            int ret = Convert.ToInt16(MessageBox.Show(pergunta, "Atenção",

                MessageBoxButtons.YesNo,

                MessageBoxIcon.Question));

            if (ret == 6)

            {

                clnClientes cliente = new clnClientes();

                cliente.IdCli = int.Parse(txtIdCli.Text);

                cliente.NomeCli = txtnomeCli.Text;

                cliente.Excluir();

                string mensagem = "Registro Cliente: " +

                    cliente.IdCli + "\nNome: " + cliente.NomeCli +

                    "\nExcluído com sucesso";

                MessageBox.Show(mensagem, "Sucesso",

                    MessageBoxButtons.OK,

                    MessageBoxIcon.Information);

                LimparTxt(groupBox1);

                btnAtualizar.Enabled = false;

                btnCancelar.Enabled = false;

                btnExcluir.Enabled = false;

                txtIdCli.Enabled = true;

                txtIdCli.Focus();

            }

            else

            {

                MessageBox.Show("Operação Cancelada",

                    "Cancelada", MessageBoxButtons.OK,

                    MessageBoxIcon.Information);

            }

        }

 

10) Abaixo o código do botão cancelar.

        private void btnCancelar_Click(object sender, EventArgs e)

        {

            LimparTxt(groupBox1);

            btnIncluir.Enabled = false;

            btnAtualizar.Enabled = false;

            btnCancelar.Enabled = false;

            btnExcluir.Enabled = false;

            txtIdCli.Enabled = true;

            txtIdCli.Focus();

        }

 

Neste momento não será colocado código para o botão procurar. Retornaremos a este ponto em breve.

 

11) Abaixo código do último botão, o botão sair. A finalidade é apenas sair do formulário atual e não da aplicação, uma vez que esse não será o formulário principal deste nosso sistema exemplo.

 

        private void btnSair_Click(object sender, EventArgs e)

        {

            this.Close();

        }

 

Bom, agora que já está pronto o formulário: cadastro de clientes, o próximo passo é criar um formulário genérico de consulta. Este formulário servirá para pesquisa em todas as tabelas do banco.

 

12) Agora, adicione um novo formulário a essa aplicação e renomei-o com o nome FrmPesquisa.cs, coloque (ou crie) esse formulário dentro da pasta [Camada Apresentacao].

 


 

Figura  SEQ Figura \* ARABIC 6 - Solution Explorer (FrmPesquisa.cs)

 

Quem acompanhou a série de artigos do desenvolvimento em camada para o Visual Basic, deve se lembrar deste formulário. A idéia aqui é a mesma, só que em Csharp. Mas vale a pena relembrar.

 

13) Arraste para o formulário FrmConsulta os seguintes objetos 02 groupboxs, 03 labels, 02 combobox, 01 textbox, 01 button e 01 datagrid. Conforme abaixo:

 

 


Figura  SEQ Figura \* ARABIC 7 - Formulário FrmPesquisa.cs

 

14) Altere as propriedades dos objetos do formulário conforme quadro:

 

Objeto

Propriedade

Valor

ComboBox1

NAME

DROPDOWNSTYLE

cmbCampo

DropDownList

ComboBox2

NAME

DROPDOWNSTYLE

cmbParam

DropDownList

TextBox1

NAME

TxtBusca

Button1

NAME

btnFiltrar

DataGridView1

NAME

Dgv1

Os controles do tipo GroupBox não precisam alterar a propriedade NAME.

 

15) Agora vamos retornar ao formulário FrmClientes, para adicionar o código que responde ao evento click no botão procurar. No entanto declare a biblioteca com o keyword using antes.

...

using System.Windows.Forms;

using Seguros_OO.Camada_Intermediaria.Logica_Negocios;

using Seguros_OO.Camada_Apresentacao;

 

16) Agora sim. Vamos ao código do botão procurar:

 

        private void btnProcurar_Click(object sender, EventArgs e)

        {

            FrmPesquisa f = new FrmPesquisa();

            f.Text = "Consulta dados dos clientes";

            f.Tag = "tbCliente"; //nome da tabela (macete)  :)

            f.ShowDialog();

        }

 

17) Alterne agora para o formulário FrmPesquisa e declare as bibliotecas necessárias para instanciamento das classes (namespace).

 

using Seguros_OO.Camada_Intermediaria.Logica_Negocios;

 

18) Neste momento adicione o código para o evento Load do formulário “FrmPesquisa”.

 

        private void FrmPesquisa_Load(object sender, EventArgs e)

        {

            string csql = "Select * From " + this.Tag.ToString();

            clsDados geral = new clsDados();

            DataSet ds = geral.RetornarDataSet(csql);

            dgv1.DataSource = ds.Tables[0];

            ds.Tables[0].Columns[0].ColumnName.ToString();

            cmbCampo.Items.Clear();

            for (int i = 0; i < ds.Tables[0].Columns.Count; i++)

cmbCampo.Items.Add(ds.Tables[0].Columns[i].ColumnName.ToString());

        }

 

O método acima é disparado quando o formulário é carregado, Inicialmente declaramos uma string chamada csql com a cláusula select, cujo objetivo é buscar no banco de dados todos os campos da tabela indicada na propriedade Tag do formulário corrente. Veja que essa propriedade foi carregada com o nome da tabela indica no item 16, destacado como “macete”. Desta forma este formulário pode ser reaproveitado em qualquer chamada a partir de outros formulário, desde que você indique na hora do instancimento do formulário o nome da tabela desejada. Uma boa idéia é para você é melhorar mais tarde o funcionamento deste formulário.

 

Ainda nesse código através de uma estrutura de repetição for, percorremos todas as colunas (campos) da tabela em questão e adicionamos o seu nome (nome do campo) ao controle cmbCampo.

 

Agora vamos adicionar um código, para que quando o usuário escolha um campo no controle cmbCampo, seja preechido o cmbParam com os tipos de busca possível para o tipo de campo selecionado, ou seja, se o usuário escolher um campo tipo “string” o campo cmbParam deve ter as opções tipo: “começando com”, “terminando em”, “igual a”, “tem a palavra”, e se for int deve der opções do tipo: “>”, “<”, etc.

 

19) Código do cmbCampo (quando o usuário escolher um campo);

 

        private void cmbCampo_SelectedIndexChanged(object sender, EventArgs e)

        {

            int indiceCampo = cmbCampo.SelectedIndex;

            string tipocampo = this.dgv1.Columns[indiceCampo].ValueType.ToString();

            if(tipocampo.Trim()=="System.Int32")

            {

                cmbParam.Items.Clear();

                cmbParam.Items.Add("=");

                cmbParam.Items.Add(">");

                cmbParam.Items.Add(">=");

                cmbParam.Items.Add("<");

                cmbParam.Items.Add("<=");

                cmbParam.Items.Add("<>");

            }

            else if (tipocampo.Trim() == "System.String")

            {

                cmbParam.Items.Clear();

                cmbParam.Items.Add("=");

                cmbParam.Items.Add("Começa com");

                cmbParam.Items.Add("Termina em");

                cmbParam.Items.Add("Tem a palavra");

            }

            else

            {

                MessageBox.Show("Implemente Código para outros tipos");

            }

        }

 

OBS do Autor: Veja que não implementei para todos os tipos de dados, apenas para os tipos mais comuns. Int e string, fica para você implementar para os demais tipos usados.

 

20) Para finalizar o conteúdo desse artigo, vamos ao código que responderá ao evento click do Botão filtrar.

 

        private void btnFiltrar_Click(object sender, EventArgs e)

        {

            string campo = cmbCampo.Text;

            string parametro = cmbParam.Text;

            string valor = txtBusca.Text;

            int indiceCampo = cmbCampo.SelectedIndex;

            string tipocampo = this.dgv1.Columns[indiceCampo].ValueType.ToString();

            //Para tipos String

            if(tipocampo=="System.String")

            {

                if(parametro=="Tem a palavra")

                {

                    parametro= "Like ";

                    valor = "'%" + valor + "%'";

                }

                else if(parametro=="=")

                {

                    parametro= "=";

                    valor = "'" + valor + "'";

                }

                else if(parametro=="Começa com")

                {

                    parametro= "Like ";

                    valor = "'" + valor + "%'";

                }

                else if (parametro=="Termina em")

                {

                    parametro = "Like ";

                    valor = "'%" + valor + "'";

                }

            }

            //Para tipos int não são necessário ajustes.

            string csql = "Select * from " + this.Tag.ToString() +

                " where " + campo + " " + parametro + " " + valor;

            clsDados busca = new clsDados();

            DataSet ds = busca.RetornarDataSet(csql);

            this.dgv1.DataSource = ds.Tables[0];

        }

 

Note que esse formulário de pesquisa poderá ser utilizado por qualquer formulário de cadastro, sem alterações. Você pode melhorar o código com o tratamento para os outros tipos de dados como data e hora por exemplo.

 

Conclusão

 

Neste quarto artigo foi apresentado a camada de apresentação, onde foram criados os formulários para cadastro de dados do cliente e um formulário de pesquisa genérico que pode ser utilizado em toda a aplicação. Essa camada faz a interface com a camada intermediária, em sua maior parte com a lógica de negócios, entretanto no caso específico do formulário de pesquisa (por ser “generalista”) a interface é feita direta com a lógica do contralador através do método RetornaDataSet da classe clsDados.

 

Lembro que ao ao final dessa série de artigos, disponibilizarei o código dessa aplicação exemplo. Espero que estejam gostando. Comentários são benvindos e oportunos, como vimos no início.

 

Um grande abraço e até o próximo artigo,

 

Marcos Roberto de Moraes [Maromo]

Administrador de Sistemas de Informação

 

 

 

 

 

 

 

 

 





    5 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Jose Airton Baros De Araujo
Marcos, que voçê continue assim, são poucos os que sabem e sabem retransmitir de forma fácil e com sensibilidade.
[há +1 ano] - Responder

 

Marcos Roberto De Moraes
José Airton. Grato pela mensagem.
[há +1 ano] - Responder
 

Paulo Cristiano Klein

OTIMO!! Em meia semana de estudo, aprendi muita coisa sobre c#.Mas mais do que isso, um template para desenvolver outor programas com a mesma metodologia de Multicamadas!! Muito Obrigado por disponibilizar esse esforço de forma gratuita...

[há +1 ano] - Responder

 

Allan Roberto
Achei o artigo muito interessante, mas gostaria de selecionar um conteúdo no grid para retornar para o form de cliente pra parada ficar batuta... tem alguma dica
[há +1 ano] - Responder

 

Luiz Agnelo C. Maia
Segue um exemplo:
 
 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace DESKTOP

{

public partial class Categoria : Form

{

private List c = new List();

private List g = new List();

public NEGOCIO.Perfil perfil;

public NEGOCIO.Categoria categoria;

public NEGOCIO.Departamento departamento;

private int linhaAtual = -1;

private string codCategoria;

private string codDepartamento;

private string dscCategoria;

private string dscDepartamento;

private string indAtivo;

private void obtemDadosGrid()

{

codCategoria = dgvDados[0, linhaAtual].Value.ToString();

codDepartamento = dgvDados[1, linhaAtual].Value.ToString();

dscCategoria = dgvDados[2, linhaAtual].Value.ToString();

dscDepartamento = dgvDados[3, linhaAtual].Value.ToString();

indAtivo = dgvDados[4, linhaAtual].Value.ToString();

tbCodigo.Text = codCategoria;

tbDescricao.Text = dscCategoria;

cmDepartamentoEdicao.SelectedIndex = cmDepartamentoEdicao.FindString(dscDepartamento);

cbAtivoEdicao.Checked = (indAtivo == "S");

btExcluir.Enabled = btAlterar.Enabled = true;

}

public Categoria()

{

InitializeComponent();

}

private void Categoria_Load(object sender, EventArgs e)

{

perfil = new NEGOCIO.Perfil();

categoria = new NEGOCIO.Categoria();

departamento = new NEGOCIO.Departamento();

CarregarDepartamentos();

int codUsuario = Convert.ToInt32(Global.CodUsuario);

btExcluir.Visible = btNovo.Visible = btSalvar.Visible = (perfil.TipoPermissaoFormUsuario(codUsuario, NEGOCIO.Perfil.Perfis.PRODUTOS) == "E" || perfil.TipoPermissaoFormUsuario(codUsuario, NEGOCIO.Perfil.Perfis.ADMIN) == "E");

}

private void CarregarDepartamentos()

{

List g = departamento.Buscar();

g.Insert(0, new NEGOCIO.Departamento(0, "Todos"));

cmDepartamento.DataSource = g;

cmDepartamento.ValueMember = "codDepartamento";

cmDepartamento.DisplayMember = "dscDepartamento";

List gEdicao = departamento.Buscar();

gEdicao.Insert(0, new NEGOCIO.Departamento(0, "Selecione"));

cmDepartamentoEdicao.DataSource = gEdicao;

cmDepartamentoEdicao.ValueMember = "codDepartamento";

cmDepartamentoEdicao.DisplayMember = "dscDepartamento";

}

private void Pesquisar()

{

tbDados.SelectedTab = tpExibicao;

string strPalavraChave = tbPesquisa.Text;

int codDepartamento = Convert.ToInt32("0" + cmDepartamento.SelectedValue);

string indAtivo = (cbAtivo.Checked ? "S" : "");

dgvDados.DataSource = categoria.Buscar(0, codDepartamento, strPalavraChave, indAtivo);

lbQdtRegistros.Text = String.Format("Registros encontrados: {0}", categoria.Buscar(0, codDepartamento, strPalavraChave, indAtivo).Count.ToString());

btExcluir.Enabled = btAlterar.Enabled = false;

LimparTela();

}

private void btPesquisa_Click(object sender, EventArgs e)

{

Pesquisar();

}

private void btFechar_Click(object sender, EventArgs e)

{

this.Close();

}

private void dgvDados_CellClick(object sender, DataGridViewCellEventArgs e)

{

linhaAtual = int.Parse(e.RowIndex.ToString());

if (linhaAtual >= 0)

obtemDadosGrid();

}

private void btVoltar_Click(object sender, EventArgs e)

{

LimparTela();

tbDados.SelectedTab = tpExibicao;

}

private void btExcluir_Click(object sender, EventArgs e)

{

string msg = String.Format("Tem certeza que deseja EXCLUIR o registro selecionado [c¢digo:{0}] ?", codCategoria);

if (codCategoria != "" && codCategoria != null && linhaAtual >= 0)

{

if (MessageBox.Show(msg, "Excluir", MessageBoxButtons.YesNo) == DialogResult.Yes)

{

try

{

int qtdAfetado = categoria.Acao("D", Convert.ToInt32(codCategoria));

Global.MensagemRegistroAfetado("D", qtdAfetado);

}

catch (Exception err)

{

Global.MensagemRegistroAfetado("D", -1, err.Message);

}

}

}

Pesquisar();

}

private void btAlterar_Click(object sender, EventArgs e)

{

tbDados.SelectedTab = tpAcao;

}

private void btNovo_Click(object sender, EventArgs e)

{

LimparTela();

tbDados.SelectedTab = tpAcao;

}

private void btSalvar_Click(object sender, EventArgs e)

{

bool frmValido = true;

int codigo = Convert.ToInt32("0" + tbCodigo.Text);

int codDepartamento = Convert.ToInt32("0" + cmDepartamentoEdicao.SelectedValue);

string descricao = Convert.ToString("" + tbDescricao.Text);

string ativo = (cbAtivoEdicao.Checked ? "S" : "N");

string acao = (codigo == 0 ? "I" : "U");

if (descricao.Length == 0)

{

MessageBox.Show("Preencha a DESCRIۂO da Categoria.");

tbDescricao.Focus();

frmValido = false;

}

else if (codDepartamento == 0)

{

MessageBox.Show("Preencha o DEPARTAMENTO da Categoria.");

cmDepartamentoEdicao.Focus();

frmValido = false;

}

if (frmValido)

{

try

{

int qtdAfetado = categoria.Acao(acao, codigo, codDepartamento, descricao, ativo);

Global.MensagemRegistroAfetado(acao, qtdAfetado);

}

catch (Exception err)

{

Global.MensagemRegistroAfetado(acao, -1, err.Message);

}

Pesquisar();

}

}

private void LimparTela()

{

linhaAtual = -1;

codCategoria = "";

codDepartamento = "";

dscCategoria = "";

indAtivo = "";

tbCodigo.Text = "";

tbDescricao.Text = "";

cmDepartamentoEdicao.SelectedIndex = 0;

cbAtivoEdicao.Checked = false;

}

}

}

[há +1 ano] - Responder
 



[Este post ainda não foi associado a uma sequência]
Publicidade
Autor
Marcos Roberto De Moraes

Mestre em Educação pela UNISAL.
Especialista em Administração de Sistemas de Informação pela Universidade Federal de Lavras-MG (UFLA).
Licenciado pleno em informática pela Universidade Metodista de Piracicaba (UNIMEP).
Graduado em Tecnologia em Processamento de Dados pela Unipinhal.
...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
8   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03